package com.ehomepay.xyxeample.common.redis.service;

import java.util.List;
import java.util.Map;

/**
 * Created by Administrator on 2018/5/8.
 */
public interface RedisClientTemplate {


    boolean isCacheSwitchOpen();

    /**
     *
     * @Description:通过key 查询一个字符串
     * @return String 返回类型
     */
    String get(String key);

    /**
     *
     * @Description:通过原生key 查询一个字符串
     * @return String 返回类型
     */
    String getNativeByKey(String key);

    /**
     *
     * @Title: set
     * @Description:
     * @param
     * @return void 返回类型
     * @throws
     */
    void set(String key, String value);

    /**
     *
     * set 设置带过期时间的字符缓存
     * @param key
     * @param value
     * @param time 过期时间，秒
     * @description
     * @exception
     * @since  1.0.0
     */
    void set(String key, String value,int time);
    /**
     *
     * @Title: isExist
     * @Description: 判断key是否存在
     * @param
     * @return boolean 返回类型
     * @throws
     */
    boolean isExist(String key);

    boolean delete(String key);

    /**关于 redis list的操作  将 值 value 插入到列表 key 的表尾(最右边)。
     * @param key
     * @param value
     * @return
     */
    long putToListEnd(String key,String value);

    /**
     *
     * @Description: 从redis中取出List存储的字符串
     * @param key
     * @return
     * @return: List<String>
     */
    List<String> getListHead(String key);

    /**
     * 存储map
     * @param key		键值
     * @param field		map field
     * @param value		map value
     * @return			if filed exist return 0 else return 1
     */
    Long hset(String key,String field,String value);


    String hset(String key,Map<String,String> values);
    /**
     * 得到map中存储的field值
     * @param key		键值
     * @param field		map field
     * @return
     */
    String hget(String key,String field);

    Map<String, String> hgetAll(String key);


    /**名称为key的string减1操作
     * @param key
     * @return
     */
    Long decr(String key);

    /**名称为key的string加1操作
     * @param key
     * @return
     */
    Long incr(String key);
    /**
     *
     * @Description: 设定键值过期
     * @param key       键值
     * @param seconds   过期时间秒
     * @return
     */
    Long expire(String key,int seconds);

    /**
     * 加锁
     * @param key
     * @param timeout 单位:秒
     * @return true 锁成功
     */
    public boolean lock(String lockKey , String requestId , int timeout);

    /**
     * 解锁
     * @param key
     * @return
     */
    public boolean unlock(String key,String requestId);

}
